package com.extension.company.common.mvc;

import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.DisplayCutout;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;

import com.extension.company.admin.R;
import com.jaeger.library.StatusBarUtil;

import butterknife.ButterKnife;
import butterknife.Unbinder;

/**
 * 功能：activity 的基类
 */
public abstract class BaseActivity extends AppCompatActivity {

	private Unbinder unbinder;
	
	@Override
	protected void onCreate(Bundle arg0) {
		super.onCreate(arg0);
		
		// 设置键盘默认隐藏
		getWindow().setSoftInputMode(
				WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

		setContentView(getMainLayout());
		unbinder=ButterKnife.bind(this);

		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
			//sdk大于或等于11
			//启动硬件加速
			getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
					WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
		}
		initView();
		initData();
		initListener();
	}

	/**
	 * 抽象方法，子类实现具体方法，注入视图
	 */
	protected abstract void initView();

	/**
	 * 抽象方法，子类实现具体方案，注入数据
	 */
	protected abstract void initData();

	/**
	 * 抽象方法，子类实现具体的方案，设置监听
	 */
	protected abstract void initListener();

	/**
	 * 抽象方法，子类实现，获得主界面layout资源
	 * 
	 * @return
	 */
	public abstract int getMainLayout();
	
	/**
	 * 泛型方法，获取控件的id
	 * 
	 * @param id  控件的ID
	 * @param <T> 控件的类型
	 * @return    控件对象
	 */
	protected <T extends View> T getViewById(int id) {
		return (T) findViewById(id);
	}
	
	/**
	 * 泛型方法，获取Inflater.inflate(R.id.xx) 下的控件的id
	 * 
	 * @param view  渲染的布局
	 * @param id    控件的id
	 * @param <T>   控件的类型
	 * @return      控件对象
	 */
	protected <T extends View> T getViewById(View view, int id) {
		return (T) view.findViewById(id);
	}

	/**
	 * 功能：手机在设置字体显示大小的时候，app中设置为sp的字体会根据用户的设置改变，导致显示的问题
	 * 解决：使用onConfigureationChange 和getResources()方法。
	 *      configuration.fontScale==1 是随系统调解字体大小而发生改变。可以在!=1的时候， newConfig.setToDefaults()设置默认的值。
	 * @param newConfig
	 */
	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		if (newConfig.fontScale != 1) {
			//非默认值
	        getResources();  
		}
		super.onConfigurationChanged(newConfig);
	}
	
	@Override
	public Resources getResources() {
		Resources res = super.getResources();
	     if (res.getConfiguration().fontScale != 1) {//非默认值
	        Configuration newConfig = new Configuration();
	        newConfig.setToDefaults();//设置默认        
	        res.updateConfiguration(newConfig, res.getDisplayMetrics()); 
	     }    
	     return res;
	}
	/**
	 * 取消方法
	 */
	public void onBtnCancel() {
		finish();
	}
	
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { // event.getRepeatCount()==0 防止快速的多次按下的误操作
			onBtnCancel();
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		if (unbinder != null) {
			unbinder.unbind();
		}
	}
}



